import { activeEffect, depsMap } from "./effect";

/**
 * 触发器
 * @param target 目标对象
 * @param type 收集的类型
 * @param key 属性名
 */
const trigger = (target: object, type: string, key: string | symbol) => {
  //   console.log(`触发器：代理对象${String(key)}属性的${type}操作被拦截`);
  // 运行依赖函数，即派发更新
  const deps = depsMap.get(key);
  if (deps) {
    const effectToRun = new Set(deps); // 利用set集合，解决循环执行问题（通过复制依赖收集前的集合，对其依赖函数依次执行，避免了真实依赖函数集合的不断更新）
    effectToRun.forEach((depFn) => depFn());
  }
};

export default trigger;
